﻿/* 文档说明-->WEB前台验证的类
 *
 * @link 		http://...
 * @copyright 	2005  Ling Deming
 * @author 		gaby <ldmmyx@hotmail.com>
 * @version 	1.0
 */


/* 验证对象的构造函数
 *
 */
function Validation()
{
	this.errorInfo = '';		//-- 函数返回的错误信息
	this.isNumber  = isNumber;	//-- 判断是否是数字的方法
	this.isEmail   = isEmail;	//-- 判断是否是Email地址的方法
	this.isUrl     = isUrl;		//-- 判断是否是网址的方法
	this.isDate    = isDate;	//-- 判断是否是日期
	this.isChinese = isChinese;	//-- 判断是否是中文
	this.isEmpty   = isEmpty;	//-- 

	this.isCompare = isCompare;	//-- 比较两个字串的长度和是否相等，一般用在密码比较
	this.isMobile  = isMobile;	//-- 判断是否手机号码（简单的测试）
	this.strCheckMobile  	= strCheckMobile;		//-- 判断是否手机号码（简单的测试）
	this.validFloat  		= validFloat;			//-- 判断是否是数字和小数位数限制
	this.isConfirmOperate	= isConfirmOperate ;
	this.isCompareEN = isCompareEN;					//-- 比较两个字串的长度和是否相等，一般用在密码比较

}

/* 判断是否是数字
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  return boolean  	 	← true: 是数字   false: 不是数字
 */
function isNumber(objectID,labelName, allowEmpty)
{
	if(allowEmpty != undefined){
		if(document.getElementById(objectID).value == ''){
			return true;
		}
	}

	if(labelName == undefined)
		labelName='';
	if(document.getElementById(objectID).value == ''){
		alert(labelName+" isn't number.");
		document.getElementById(objectID).focus();
		return false;
	}else if(document.getElementById(objectID).value.match('^[0-9]{1,}$'))
		return true;
	else{
		alert(labelName+" isn't number.");
		document.getElementById(objectID).focus();
		return false;
	}
}

/* 判断是否是email地址
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  string allowEmpty    ← 是否允许空值，不定义是不允许
 * @param  return boolean  	 	← true: 是email地址   false: 不是email地址
 */
function isEmail(objectID,labelName,allowEmpty)
{
	if(allowEmpty != undefined){
		if(document.getElementById(objectID).value == ''){
			return true;
		}
	}

	if(labelName == undefined)
		labelName='';

	if(document.getElementById(objectID).value == ''){
		alert(labelName+' is required.');
		document.getElementById(objectID).focus();
		return false;
	}else if (document.getElementById(objectID).value.match("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$")){
		return true;
	}else{
		alert(labelName + ' format is invalid.');
		document.getElementById(objectID).focus();
		
		return false;
	}
}


/* 判断是否是网址
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  string DefaulValue   ← 设默认值，有默认值时对象的值和默认值相同返回真，不定义时进行验证
 * @param  return boolean  	 	← true: 是网址   false: 不是网址
 */
function isUrl(objectID,labelName,DefaulValue)
{
	if(labelName == undefined)
		labelName='';
	if(DefaulValue != undefined){
		if(document.getElementById(objectID).value == DefaulValue){
			return true;
		}
	}
	if(document.getElementById(objectID).value == ''){
		alert(labelName+'请输入网址！');
		document.getElementById(objectID).focus();
		return false;
	}else if (document.getElementById(objectID).value.match('^http:\/\/[a-z0-9@:%_.~#-\?&]+$'))
		return true;
	else{
		alert(labelName+'输入的不是正确的网址！');
		document.getElementById(objectID).focus();
		return false;
	}
}

/* 判断是否是中文
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  string yesVSno       ← 要判断的是不是中文，默认是
 * @param  return boolean  	 	← true: 是中文   false: 不是中文
 */
function isChinese(objectID,labelName,yesVSno)
{
	if(labelName == undefined)
		labelName='';
	if(yesVSno == undefined)
		yesVSno='yes';
	if(document.getElementById(objectID).value == ''){
		if(yesVSno == 'yes')
			alert(labelName+'请输入中文字符！');
		else
			alert(labelName+'请输入不包含中文的字符！');
		document.getElementById(objectID).focus();
		return false;
	}else if (document.getElementById(objectID).value.replace(/[ -}]/g,'')){
		if(yesVSno == 'no'){
			alert(labelName+'输入的字符中有中文字符！');
			document.getElementById(objectID).focus();
			return false;
		}else
			return true;
	}else{
		if(yesVSno == 'yes'){
			alert(labelName+'输入的不是中文！');
			document.getElementById(objectID).focus();
			return false;
		}else
			return true;
	}
}

/* 判断是否是日期	格式  yyyy-mm-dd
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  return boolean  	 	← true: 是日期   false: 不是日期
 */
function isDate(objectID,labelName)
{
	if(labelName == undefined)
		labelName='';
	if(document.getElementById(objectID).value == ''){
		alert(labelName+'请输入日期！');
		document.getElementById(objectID).focus();
		return false;
	}else if (document.getElementById(objectID).value.match("[0-2][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]")){
		if(parseInt(document.getElementById(objectID).value.substr(5,2))>12){
			alert(labelName+'输入的日期月份不对！');
			document.getElementById(objectID).focus();
			return false;
		}else if(parseInt(document.getElementById(objectID).value.substr(8,2))>31){
			alert(labelName+'输入的日期天数不对！');
			document.getElementById(objectID).focus();
			return false;
		}else
			return true;
	}else{
		alert(labelName+'输入的不是正确的日期格式！格式：yyyy-mm-dd');
		document.getElementById(objectID).focus();
		return false;
	}
}

/* 判断是否为空
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  string limitLength   ← 限制长度的大小
 * @param  return boolean  	 	← true: 是空   false: 不为空
 */
function isEmpty(objectID,labelName, limitLength)
{
	if(labelName == undefined)
		labelName='';
	if(document.getElementById(objectID).value == ''){
		alert(labelName+" is required.");
		document.getElementById(objectID).focus();
		return true;
	}else if(limitLength != undefined){
		if(document.getElementById(objectID).value.length > limitLength){
			alert(labelName + ' length more than' + limitLength + " char.");
			document.getElementById(objectID).focus();
			return true;
		}else
			return false;
	}else
		return false;
}

/* 比较两个字串的长度和是否相等，一般用在密码比较
 *
 * @param  string inputObject1  ← 要比较的对象1
 * @param  string inputObject2  ← 要比较的对象2
 * @param  string downLength	← 限定下限长度
 * @param  string topLength	    ← 限定上限长度
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  return boolean  	 	← true: 一致   false: 不同
 */
function isCompare(objectID1,objectID2,labelName,downLength,topLength)
{
	if(labelName == undefined)
		labelName='';
	if(document.getElementById(objectID1).value == ''){
		alert(labelName+'不能为空！');
		document.getElementById(objectID1).focus();
		return false;
	}
	if(downLength != undefined && downLength != 0){
		if(document.getElementById(objectID1).value.length < downLength){
			alert(labelName+'需要输入至少'+downLength+'个字符！');
			document.getElementById(objectID1).focus();
			return false;
		}
	}
	if(topLength != undefined && topLength != 0){
		if(document.getElementById(objectID2).value.length > topLength){
			alert(labelName+'不能输入大于'+topLength+'个字符！');
			document.getElementById(objectID2).focus();
			return false;
		}
	}
	if(document.getElementById(objectID1).value != document.getElementById(objectID2).value){
		alert(labelName+'两次输入不相同！');
		document.getElementById(objectID1).focus();
		return false;
	}else
		return true;
}

/* 比较两个字串的长度和是否相等，一般用在密码比较
 *
 * @param  string inputObject1  ← 要比较的对象1
 * @param  string inputObject2  ← 要比较的对象2
 * @param  string downLength	← 限定下限长度
 * @param  string topLength	    ← 限定上限长度
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  return boolean  	 	← true: 一致   false: 不同
 */
function isCompareEN(objectID1,objectID2,labelName,downLength,topLength)
{
	if(labelName == undefined)
		labelName='';
	if(document.getElementById(objectID1).value == ''){
		alert(labelName+' should not be empty.');
		document.getElementById(objectID1).focus();
		return false;
	}
	if(downLength != undefined && downLength != 0){
		if(document.getElementById(objectID1).value.length < downLength){
			alert(labelName+' can not less than '+downLength+' char.');
			document.getElementById(objectID1).focus();
			return false;
		}
	}
	if(topLength != undefined && topLength != 0){
		if(document.getElementById(objectID2).value.length > topLength){
			alert(labelName+' can not more than '+topLength+' char.');
			document.getElementById(objectID2).focus();
			return false;
		}
	}
	if(document.getElementById(objectID1).value != document.getElementById(objectID2).value){
		alert(labelName+' input is differece with two times.');
		document.getElementById(objectID1).focus();
		return false;
	}else
		return true;
} 

/* 判断是否为手机号码（包括小灵通，只能进行简单的测试)
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  return boolean  	 	← true: 是空   false: 不为空
 */
function isMobile(objectID,labelName)
{
	if(labelName == undefined)
		labelName='';
	var strValue = document.getElementById(objectID).value;

	if(strValue == ''){
		alert(labelName+'不能为空！');
		document.getElementById(objectID).focus();
		return false;
	}else if(!strValue.match('^[0-9]{1,}$')){
		alert(labelName+'不是数字！');
		return false;
	}else if((strValue.substr(0,2) == "13") || (strValue.substr(0,2) == "15")){
		if(strValue.length == 11){
			return true;
		}else{
			alert(labelName+'位数不对！');
			return false;
		}
	}else if(strValue.substring(0,1) == "0"){
		if(strValue.length > 9){
			return true;
		}else{
			alert(labelName + '位数不对！');
			return false;
		}
	}else{
		alert("请输入正确的" + labelName);
		return false;
	}
}

/* 判断手机号码所属运营商
 *
 * @param  string mobile   ← 要判断的手机号码
 * @param  return boolean  	← true: 是空   false: 不为空
 */
function strCheckMobile(strMobile)
{
	if(strMobile == "")
		return "em";	//-- 为空

	if(strMobile.match("^13[0-3]{1}[0-9]{8}$")){
		return "cu";	//-- 联通号码
	}else if(strMobile.match("^13[4-9]{1}[0-9]{8}$")){
		return "cm";	//-- 移动号码
	}else if(strMobile.match("^0[1-9]{1}") && strMobile.length > 9){
		return "phs";	//-- 小灵通号码
	}else
		return "no";	//-- 不是手机
}

/* 判断输入值是否数字和位数
 *
 * @param  string inputObject   ← 要判断的对象
 * @param  string labelName     ← 显示要判断的对象的名字相关的信息
 * @param  string digit			← 限制的位数
 * @param  return boolean  		← true: 输入正确   false: 输入不正确
 */
function validFloat(objectID, labelName, digit)
{
	if(isNaN(document.getElementById(objectID).value)){
	  alert("请输入有效数字");
	  document.getElementById(objectID).focus();
	  return false;
    }
    if(!checkDecimal(document.getElementById(objectID).value, digit)){
		alert("您输入的数据小数位最多为" + digit + "个小数位");
		document.getElementById(objectID).focus();
		return false;
	}
	return true;
}

/* 检查小数位数
 *
 * @param  string num     		← 要检查的值
 * @param  string decimalLen	← 限制的位数
 * @param  return boolean  		← true: 输入正确   false: 输入不正确
 */

function checkDecimal(num,decimalLen)
{
  	var len = decimalLen*1+1;
  	if(num.indexOf('.')>0){
    	num=num.substr(num.indexOf('.')+1,num.length-1);
	    if ((num.length)<len){
	      	return true;
	    }else{
	      	return false;
	    }
  	}
  	return true;
}

function isConfirmOperate(operate)
{
	if(confirm("Your confirm to continue the " + operate + " Action?")) 
		return true;
	else
		return false;
}

var validDefault = new Validation();